package com.yunsc.product.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunsc.product.dto.GoodsBaseDTO;
import com.yunsc.product.dto.QueryGoodsDTO;
import com.yunsc.product.entity.YunscGoodsEntity;
import com.yunsc.product.vo.GoodsDetailVO;
import com.yunsc.product.vo.GoodsInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 商品记录表
 *
 * @author adan
 * @email 2028038953@qq.com
 * @date 2024-04-04 21:28:41
 */
@Mapper
public interface YunscGoodsDao extends BaseMapper<YunscGoodsEntity> {

    GoodsBaseDTO selectGoodsBaseById(@Param("goodsId") Integer goodsId);

    /**
     * 分页查询商品列表
     *
     * @param query   查询条件
     * @param storeId 当前门店id
     * @return 分页商品列表
     */
    IPage<GoodsInfoVO> selectGoodsPageList(
            Page<GoodsInfoVO> page,
            @Param("query") QueryGoodsDTO query,
            @Param("storeId") Integer storeId);

    /**
     * 根据分类id查询商品列表
     *
     * @param categoryId 分类id
     * @param showNum    显示数量
     * @param goodsSort  排序规则 goodsSort: sales all price 排序方式 sales:销量  all:全部 price:价格
     * @return 商品列表
     */
    List<GoodsDetailVO> selectGoodsByCategoryId(
            @Param("categoryId") Integer categoryId,
            @Param("showNum") Integer showNum,
            @Param("goodsSort") String goodsSort);

    /**
     * 根据商品分类id查询商品列表
     *
     * @return 商品列表
     */
    IPage<GoodsInfoVO> selectGoodsList(Page<GoodsInfoVO> page,
                                       @Param("query") QueryGoodsDTO query,
                                       @Param("storeId") Integer storeId);


    @Update("update yunsc_goods set stock_total = yunsc_goods.stock_total - #{num}, " +
            "sales_actual = yunsc_goods.sales_actual + #{num} " +
            "where goods_id = #{goodsId} and yunsc_goods.stock_total > #{num}")
    int updateGoodsStockNum(@Param("goodsId") Integer goodsId, @Param("num") Integer num);

    @Update("update yunsc_goods set stock_total = yunsc_goods.stock_total + #{totalNum} " +
            "where goods_id = #{goodsId}")
    void addGoodsStockNum(@Param("goodsId") Integer goodsId, @Param("totalNum") Integer totalNum);
}
